package com.cskaoyan.tcp.exercise.second;

import java.io.*;
import java.net.Socket;

/*
     客户端文本文件，服务器保存文本文件

     public void shutdownOutput()
                    1.禁用此套接字的输出流。
                    2.对于 TCP 套接字，任何以前写入的数据都将被发送，并且后跟 TCP 的正常连接终止序列
 */
public class Client {
    public static void main(String[] args) throws IOException {

        // 准备用于接收文本文件内容的字符流
        FileInputStream fis = new FileInputStream("a.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));

        // 创建Socket对象
        Socket socket = new Socket("localhost", 9090);

        // 获取流
        OutputStream out = socket.getOutputStream();
        OutputStreamWriter writer = new OutputStreamWriter(out);

        String line;
        while ((line = br.readLine()) != null) {
            // 发送键盘录入的一行数据
            writer.write(line);
            writer.write('\n');
            // 读取到了我们的自定义文件末尾的标识符
            // 第一种解决方案
//            if ("finish".equals(line)) {
//                break;
//            }
        }
        // 将字符流缓冲区，数据写入底层流
        writer.flush();

        // 关闭发送端的输出流
        socket.shutdownOutput();


        // 获取输入流，来读取server端发送的响应
        InputStream in = socket.getInputStream();
        byte[] bytes = new byte[1024];
        // socket对象输入流的read方法，也是一个阻塞方法
        // 发送完文件数据之后，在这里阻塞等待，等待接收响应数据
        int count = in.read(bytes);

        String s = new String(bytes, 0, bytes.length);
        System.out.println(s);


        // 关闭 br
        br.close();
        socket.close();
    }
}
